﻿Public Class TFontList
    Implements System.IDisposable

    Private _FontList As New List(Of FontFamily)

    Public Sub New()
        InitFonts()
    End Sub

    Public ReadOnly Property Count() As Integer
        Get
            Return _FontList.Count
        End Get
    End Property
    Public ReadOnly Property Font(ByVal Index As Integer) As FontFamily
        Get
            Return _FontList(Index)
        End Get
    End Property

    Private Sub InitFonts()
        _FontList.Clear()
        Dim ifc As New System.Drawing.Text.InstalledFontCollection
        'インストールされているすべてのフォントファミリアを取得
        Dim ffs As FontFamily() = ifc.Families
        Dim ff As FontFamily
        For Each ff In ffs
            'ここではスタイルにRegularが使用できるフォントのみを表示
            If ff.IsStyleAvailable(FontStyle.Regular) Then
                _FontList.Add(ff)
            End If
        Next ff

    End Sub

    Private disposedValue As Boolean = False        ' 重複する呼び出しを検出するには

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: 他の状態を解放します (マネージ オブジェクト)。
            End If
            _FontList.Clear()
            _FontList = Nothing
            ' TODO: ユーザー独自の状態を解放します (アンマネージ オブジェクト)。
            ' TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ' このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class
